/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafika;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import logika.Hra;
import logika.Vec;

/**
 *
 * @author T
 */
public class PanelBatoh extends JPanel implements Predplatitel {

    private JList batohList;
    private DefaultListModel listModel;
    private Hra hra;
    private GUI gui;

    /**
     * Konstruktor panelu s batohem
     *
     * @param hra
     * @param gui
     */

    public PanelBatoh(Hra hra, GUI gui) {
        this.hra = hra;
        this.gui = gui;

        // Použitá barva pro texty...
        Color text = new Color(19, 179, 83);

        this.setLayout(new BorderLayout());
        // vytvořím DefaultListModel
        listModel = new DefaultListModel();
        batohList = new JList(listModel);
        batohList.setBorder(BorderFactory.createTitledBorder(null, "Batoh", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, Color.yellow));
        batohList.setBackground(Color.BLACK);
        batohList.setForeground(text);
        this.add(batohList, BorderLayout.CENTER);
        batohList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        batohList.getSelectionModel().addListSelectionListener(new OvladacBatohu());
        batohList.setPreferredSize(new Dimension(120, 70));
        batohList.setCellRenderer(new ZobrazeniPolozkyListu());
    }

    /**
     * Musím překrýt metodu setEnabled ze třídy JPanel a v ní nastavit i
     * setEnabled pro vychodyList, jinak bude JList aktivní i pokud dám
     * na celý panel setEnabled(false).
     *le
     * @param enabled
     */
    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        batohList.setEnabled(enabled);
    }

    /**
     * Metoda refresh aktualizuje seznam věcí v batohu
     */
    @Override
    public void refresh() {
        listModel.removeAllElements();
        for (Vec vec : hra.getHerniPlan().getBatoh().getVeci()) {
            listModel.addElement(vec);
        }
    }

     public void setHra(Hra hra) {
        this.hra = hra;
    }

    /**
     * Ovladač, který se používá ve vychodyList (JList) - pokud si uživatel
     * vybere nějakou položku ze seznamu, vyvolá se příkaz "jdi východ"
     */
    private class OvladacBatohu implements ListSelectionListener {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {     // skončil výběr položky
                // uživatel nějakou položku vybral
                if (batohList.getSelectedIndex() != -1) {
                    Vec vec = (Vec) batohList.getSelectedValue();
                    gui.provedPrikaz("zahod " + vec.getNazev());
                }
            }
        }
    }

    /**
     * Vnitřní třída, která vrací komponentu, pomocí které se vykreslují jednotlivé
     * položky v JList - tentokrát pro zobrazení jmen východů
     *
     * podívejte se na http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer
     *
     */
    private class ZobrazeniPolozkyListu implements ListCellRenderer {

        // pro kreslení položek v JList a v JCombobox se obvykle používá JLabel,
        private JLabel kresliciKomponenta;

        public ZobrazeniPolozkyListu() {
            kresliciKomponenta = new JLabel();
            kresliciKomponenta.setOpaque(true);  // jinak JLabel nekreslí pozadí
        }

        @Override
        public Component getListCellRendererComponent(
                JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus) {

            if (isSelected) {
                kresliciKomponenta.setBackground(list.getSelectionBackground());
                kresliciKomponenta.setForeground(list.getSelectionForeground());
            } else {
                kresliciKomponenta.setBackground(list.getBackground());
                if (list.isEnabled()) {
                    kresliciKomponenta.setForeground(list.getForeground());
                } else {
                    // vytvářím novou barvu s poloviční průhledností (alfa kanal = 127)
                    Color barvaDisabled = new Color(
                            list.getForeground().getRed(),
                            list.getForeground().getGreen(),
                            list.getForeground().getBlue(),
                            127);
                    kresliciKomponenta.setForeground(barvaDisabled);
                }
            }
            Vec vec = (Vec) value;

            //Soubor podmínek, který určuje jaký obrázek se má přiřadit k jaké věci v batohu, vím že je to
            //dost zdlouhavé a nešťastné řešení (mít hru jako je WoW tak bych musel udělat podmínek tak milion,
            //ale nijak jinak mě to nenapadlo řešit...
            if (vec.getNazev().equals("bomba")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/bomb.png");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("pistole")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/CO2WaltherCP99Schwarz.jpg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("pruzina")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/pruzina.jpeg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("Mentas")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/pill.png");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("udernik")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/udernik.jpeg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("Nuka-Kola")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/nukaKola.png");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("dekoder")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/dekoder.jpg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("RAOS")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/raos.jpg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("klic")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/key.png");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("cigarety")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/ciga.jpg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("papiry")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/papiry.gif");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else if (vec.getNazev().equals("odpalovac")) {
                URL cestaKObrazku = GUI.class.getResource("/obrazky/odpalovac.jpg");
                if (cestaKObrazku != null) {
                    kresliciKomponenta.setIcon(new ImageIcon(cestaKObrazku));
                }
            } else {
                kresliciKomponenta.setText(vec.getNazev());//pokud se nenajde obrázek věc se vykreslí jako text
            }
            kresliciKomponenta.setToolTipText(vec.getPopis());
            kresliciKomponenta.setFont(list.getFont());
            return kresliciKomponenta;
        }
    }
}
